中文為生成器模式,他的目標是要將複雜類別的結構與實作細節分離,透過相同的結構呈現不同的實作細節。
生成器模式中,運作角色有以下幾個
希望建立不同形式的產品時,且產品間的製造過程相似差異也不大時,即可使用。
當需要建立同一個物件的不同表示方式時,意即當創建具有多個形式的產品時,也可使用。
package Directors
import "builder/Products"
type Builder interface {
/* TODO: add methods */
Build()
}
type ConcreteBuilder struct {
result Products.Product
}
func NewConcreteBuilder() ConcreteBuilder {
return ConcreteBuilder{}
}
func (builder *ConcreteBuilder) Build() {
builder.result = *Products.NewProduct()
builder.result.Built = true
}
func (builder *ConcreteBuilder) GetResult() Products.Product {
return builder.result
}
package Directors
type Director struct {
builder Builder
}
func NewDirector(builder Builder) *Director {
return &Director{builder: builder}
}
func (d *Director) Construct() {
d.builder.Build()
}
package Products
type Product struct {
Built bool
}
func NewProduct() *Product {
return &Product{Built: false}
}
package main
import (
"builder/Directors"
"fmt"
)
func main() {
builder := Directors.ConcreteBuilder{}
director := Directors.NewDirector(&builder)
director.Construct()
product := builder.GetResult()
fmt.Println(product)
}
生成器(Builder)模式是一個用於將一個複雜對象的構造與它的表示分離的設計模式。這使得相同的構建過程可以創建不同的表示。模式中包含抽象生成器(Builder)、實體生成器(Concrete Builder)、產品(Product)、主管(Director)和使用端(Client)等角色。